import { WidgetOption, WidgetType } from '@/types'

/** 控件配置 - 集合 */
export const widgetMap: Map<WidgetType, WidgetOption> = new Map()

/**
 * 定义控件选项
 * @description 用以更改控件选项，或者自定义新的控件
 * @param {WidgetType | number} type 控件类型
 * @param {Partial<WidgetOption>} option 控件选项
 */
export function defineWidget(type: WidgetType | number, option: Partial<WidgetOption> | WidgetOption) {
  const widget = widgetMap.get(type)

  if (widget) {
    widgetMap.set(type, { ...widget, ...option })
  } else {
    widgetMap.set(type, option as WidgetOption)
  }
}

/**
 * 获取控件配置选项
 * @param {WidgetType} type 控件类型
 * @return {WidgetOption} 控件选项
 */
export function getWidgetOption(type: WidgetType): WidgetOption {
  return widgetMap.get(type) || (widgetMap.get(WidgetType.UNKNOWN) as WidgetOption)
}

/**
 * 获取控件配置选项列表
 * @return {WidgetOption[]} 控件配置选项列表
 */
export function getWidgetOptions(): WidgetOption[] {
  return Array.from(widgetMap.values()).filter(item => item.type !== WidgetType.UNKNOWN)
}
